package data;

import org.hibernate.Hibernate;
import org.hibernate.Session;

import viajaGratis.Usuario;

public class UsuarioDAO {

	private Usuario checkUser(Integer id){
		Session session=HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		Usuario peticion=(Usuario)session.createQuery("from Usuario as m where m.idUsuario=?").setInteger(0,id).uniqueResult();
		return peticion;
	}
	
	public Usuario selectById(Integer id){
		Session session=HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		Usuario peticion=(Usuario)session.createQuery("from Usuario as m where m.idUsuario=?").setInteger(0,id).uniqueResult();
		if(peticion!=null){
			Hibernate.initialize(peticion);
			Hibernate.initialize(peticion.getViviendas());
			Hibernate.initialize(peticion.getVotacionesEmitidas());
			Hibernate.initialize(peticion.getVotacionesRecibidas());
			Hibernate.initialize(peticion.getSolicitudes());
		}
		return peticion;
	}
	
	public void insert(Usuario u){
		if(checkUser(u.getIdUsuario())==null){
			Session session=HibernateUtil.getSessionFactory().getCurrentSession();
			session.beginTransaction();
			session.save(u);
//			for(Vivienda v:u.getViviendas()){
//				session.save(v);
//			}
			session.flush();
			session.getTransaction().commit();
		}
	}
	
	public void delete(Usuario u){
		Session session=HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		Object usuario=session.load(Usuario.class,u.getIdUsuario());
		session.delete(usuario);
		session.getTransaction().commit();
	}
	
	public void update(Usuario u){
		if(checkUser(u.getIdUsuario())!=null){
			Session session=HibernateUtil.getSessionFactory().getCurrentSession();
			session.beginTransaction();
			session.update(u);
			session.flush();
			session.getTransaction().commit();
		}
	}
}
